_Pragma("once")

#include "ExtendDevice.h"
#include "common.h"
#include "VideoPlayInfo.h"
#include "VideoController.h"
#include "UdpCommunicator.h"


#pragma pack(push, 1)

struct YmxCommandInfo{
    uint32_t protocolId{0x00584D59};
    uint32_t command;
    uint32_t videoId;
    uint32_t reserved1{0};
    uint32_t     crc{0};

};

#pragma pack(pop)



/**
 *
 * @author lizb
 */
class YmxVideoController {
public:
 YmxVideoController(const ExtendDeviceType& deviceType, const std::string& deviceActknowlege);



    bool configAndPlay(VideoPlayInfo& videoPlayInfo) ;//override
    /**
     * 根据节目序号调用节目
     *
     * @param serialNumber
     *   视频序号，三个字节，取值范围000~127
     */
    bool play(VideoPlayInfo& videoPlayInfo) ;//override

    /**
     * 速度调节
     *
     * @param serialNumber
     *  速度值，一个字节，范围1~8。
     */
       bool setSpeed(VideoPlayInfo& videoPlayInfo)  ;//override

    /**
     * 亮度调节
     *
     * @param serialNumber
     *            三个字节，亮度范围000~255
     */
    bool setBright(VideoPlayInfo& videoPlayInfo)  ;//override


    /**
     * 播放模式
     *
     * @param serialNumber
     *            模式，一个字节，取值范围0~4 模式：0-循环、1-单一、2-定时、3-同步、4-停止
     */
    bool setPlayMode(VideoPlayInfo& videoPlayInfo)  ;//override


    /**
     * 查询节目数量
     *
     */
    std::string& getVideoCount(std::string& result)  ;//override


    /**
     * 查询单个节目时长(按秒)
     *
     * @param serialNumber
     *            三个字节，视频范围000~127
     */
    int32_t getVideoDuration(VideoPlayInfo& videoPlayInfo)  ;//override


    /**
     * 设置播放时间
     *
     * @param yyyy:
     * (年)四个字节，mo: (月)两个字节 dd：(日)两个字节
     * hh：(时)两个字节，mi：(分)两个字节，ss：(秒)两个字节 serialNumber 三个字节，视频范围000~127
     */
    bool setVideoTime(std::string& datetime, VideoPlayInfo& videoPlayInfo) ;//override

    /**
     * 查询系统时间
     *
     */
    std::string& retrieveControllerTime(std::string& result);


    VideoPlayInfo mvideoPlayInfo;
    ICommunicator& mchannel;

    UdpCommunicator mcommunicator;


};
